Vue3 Hook示例

MuYan2024-03-03VueVue

Vue 3 中的 Hook 主要就是解决使用 mixin 带来的问题,在 Vue3 建议使用 Hook 替代 mixin

使用 lodash-es,自定义一个通用的防抖节流 Hook

import { debounce, throttle } from "lodash-es";

type CallbackFunction = (...args: any[]) => void;

/**
 * 防抖,在短时间内连续触发的事件,确保只有最后一次操作被执行
 * @param callback
 * @param delay 间隔
 * @returns
 */
export function useDebounce(
  callback: CallbackFunction,
  delay: number = 1000
): CallbackFunction {
  const debouncedCallback = debounce(callback, delay);

  // 组件卸载时取消防抖回调
  onUnmounted(() => {
    debouncedCallback.cancel();
  });

  return debouncedCallback;
}

/**
 * 节流,在指定时间内,事件处理函数最多只执行一次
 * @param callback
 * @param delay 间隔
 * @returns
 */
export function useThrottle(
  callback: CallbackFunction,
  delay: number = 1000
): CallbackFunction {
  const throttleCallback = throttle(callback, delay, {
    // 最后不执行
    trailing: false,
  });

  // 组件卸载时取消节流回调
  onUnmounted(() => {
    throttleCallback.cancel();
  });

  return throttleCallback;
}

// 使用
import { useThrottle, useDebounce } from "@/hooks/useDebounceThrottle";

// 防抖
const goDebounce = useDebounce(() => {
  console.log("goDebounce===>");
}, 2000);

// 节流
const goThrottle = useThrottle(() => {
  console.log("goThrottle===>");
}, 2000);
上次更新 2026/6/23 11:49:15
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8